package cn.cj.erp.bo.system;

import cn.cj.erp.common.SearchParam;
import cn.cj.erp.common.annotation.Search;
import cn.cj.erp.common.enums.SearchType;
import cn.cj.erp.common.enums.LogBusinessTypeEnum;
import cn.cj.erp.common.enums.LogOperatorTypeEnum;
import cn.cj.erp.common.enums.StatusEnum;
import cn.cj.erp.common.excel.anno.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;

/**
 * 系统日志
 *
 * @author chenjian
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class SysLogBo extends SearchParam {
    /** 主键 */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /** 操作模块 */
    @Excel(name = "操作模块")
    @Search(type = SearchType.LIKE)
    private String title;

    /** 业务类型 */
    @Excel(name = "业务类型")
    @Search(type = SearchType.EQ)
    private LogBusinessTypeEnum businessType;

    /** 请求方法 */
    @Excel(name = "请求方法")
    private String method;

    /** 请求方法 */
    @Excel(name = "请求方式")
    private String requestMethod;

    /** 操作类别 */
    @Excel(name = "操作类别")
    private LogOperatorTypeEnum operatorType;

    /** 操作人员 */
    @Excel(name = "操作人员")
    @Search(type = SearchType.LIKE)
    private String username;

    /** 部门名称 */
    @Excel(name = "部门名称")
    private String deptName;

    /** 请求地址 */
    @Excel(name = "请求地址")
    private String url;

    /** 客户端IP地址 */
    @Excel(name = "操作地址")
    private String ip;

    /** 请求参数 */
    @Excel(name = "请求参数")
    private String params;

    /** 返回参数 */
    @Excel(name = "返回参数")
    private String result;

    /** 操作状态 */
    @Excel(name = "状态")
    @Search(type = SearchType.EQ)
    private StatusEnum status;

    /** 错误消息 */
    @Excel(name = "错误消息")
    private String errorMsg;

    /** 消耗时间(毫秒) */
    @JsonSerialize(using = ToStringSerializer.class)
    @Excel(name = "消耗时间(毫秒)")
    private Long costTime;

    /** 操作时间（默认倒序排序） */
    @Search(defaultSortField = true)
    private Date operatorTime;

    /** 操作时间开始，仅搜索 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @Search(type = SearchType.BETWEEN_BEGIN, fieldName = "operator_time")
    private Date beginTime;

    /** 操作时间结束，仅搜索 */
    @Search(type = SearchType.BETWEEN_END, fieldName = "operator_time")
    private Date endTime;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /** 修改时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date modifyTime;
}
